Jackson ব্যবহার করে JSON ডেটা Serialize/Deserialize করার জন্য JUnit এবং Mockito দিয়ে টেস্টিং করা একটি সাধারণ পদ্ধতি। এই পদ্ধতিতে, JSON ডেটা হ্যান্ডলিং এবং API এর বেহেভিয়ার নিশ্চিত করতে ObjectMapper এবং মক করা সেবাগুলোর ওপর নির্ভর করে টেস্ট তৈরি করা হয়।
প্রয়োজনীয় Maven ডিপেনডেন্সি
<dependencies>
<!-- JUnit -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
<!-- Mockito -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.4.0</version>
<scope>test</scope>
</dependency>
<!-- Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
</dependencies>
Step-by-Step Integration উদাহরণ
১. মডেল ক্লাস তৈরি করা
public class User {
private String name;
private int age;
private String email;
// Constructors, Getters, and Setters
public User() {}
public User(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
২. JUnit দিয়ে Jackson টেস্ট করা
ObjectMapper ব্যবহার করে Serialization/Deserialization টেস্ট
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class JacksonTest {
@Test
public void testSerialization() throws Exception {
// Arrange
User user = new User("Alice", 30, "alice@example.com");
ObjectMapper mapper = new ObjectMapper();
// Act
String json = mapper.writeValueAsString(user);
// Assert
String expectedJson = "{\"name\":\"Alice\",\"age\":30,\"email\":\"alice@example.com\"}";
assertEquals(expectedJson, json);
}
@Test
public void testDeserialization() throws Exception {
// Arrange
String json = "{\"name\":\"Bob\",\"age\":25,\"email\":\"bob@example.com\"}";
ObjectMapper mapper = new ObjectMapper();
// Act
User user = mapper.readValue(json, User.class);
// Assert
assertEquals("Bob", user.getName());
assertEquals(25, user.getAge());
assertEquals("bob@example.com", user.getEmail());
}
}
৩. Mockito ব্যবহার করে Service Layer টেস্ট করা
Service Layer
import org.springframework.stereotype.Service;
@Service
public class UserService {
public String getUserData(User user) {
if (user.getAge() < 18) {
return "User is a minor";
}
return "User is an adult";
}
}
Mockito দিয়ে Service Layer টেস্ট
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;
public class UserServiceTest {
@Test
public void testGetUserData() {
// Arrange
UserService userService = Mockito.mock(UserService.class);
User user = new User("Charlie", 17, "charlie@example.com");
// Mocking the service method
when(userService.getUserData(user)).thenReturn("User is a minor");
// Act
String result = userService.getUserData(user);
// Assert
assertEquals("User is a minor", result);
}
}
৪. Spring Boot এবং Controller টেস্ট করা
Controller Layer
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/users")
public class UserController {
@PostMapping
public String createUser(@RequestBody User user) {
return "User created: " + user.getName();
}
}
MockMvc ব্যবহার করে Controller টেস্ট
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
@WebMvcTest(UserController.class)
public class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@Test
public void testCreateUser() throws Exception {
// Arrange
User user = new User("Alice", 30, "alice@example.com");
String json = objectMapper.writeValueAsString(user);
// Act & Assert
mockMvc.perform(post("/api/users")
.contentType("application/json")
.content(json))
.andExpect(status().isOk())
.andExpect(content().string("User created: Alice"));
}
}
৫. Test Coverage নিশ্চিত করা
- Unit Test: মডেল ক্লাস এবং সার্ভিস লেয়ার টেস্ট করার জন্য JUnit ব্যবহার।
- Mocking External Services: Mockito দিয়ে ডিপেন্ডেন্সি মক করা।
- Integration Test: MockMvc দিয়ে Controller এবং API টেস্ট করা।
- Serialization/Deserialization: Jackson এর ObjectMapper ব্যবহার করে নিশ্চিত করা যে JSON ফরম্যাট সঠিক।
- JUnit: JSON Serialization/Deserialization ভেরিফাই করতে ব্যবহার করা হয়।
- Mockito: ডিপেন্ডেন্সি মক করে সার্ভিস লেয়ার বা ডেটাবেস ইন্টারঅ্যাকশন টেস্ট করা হয়।
- Spring Boot Test Framework: MockMvc দিয়ে REST API টেস্ট করা।
- ObjectMapper: Jackson এর মাধ্যমে JSON ডেটার গুণগত মান নিশ্চিত করতে ব্যবহৃত হয়।
Content added By
Read more